package com.tmt.im.jpa.entity;

import com.tmt.data.jpa.entity.TmtBaseEntity;
import com.tmt.data.jpa.entity.TmtBaseEntityId;
import com.tmt.im.common.enums.AddFriendMode;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.SuperBuilder;

import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;

/**
 * 好友申请表
 *
 * @Description TODO
 * @Author wuyi
 * @Date 2024/8/24 15:09
 * @Version 1.0
 **/
@Getter
@Setter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Tag(name = "im_friend_apply", description = "好友申请表")
@Entity
@Table(name = "im_friend_apply")
public class IMFriendApply extends TmtBaseEntityId implements Serializable {

    @Serial
    private static final long serialVersionUID = -6510387844939763081L;

    /**
     * 申请人希望添加的好友。
     */
    @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, optional = false)
    private IMUser friend;

    /**
     * 好友申请人
     */
    @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY, optional = false)
    private IMUser creator;

    /**
     * 添加好友的方式。
     */
    @Enumerated(EnumType.STRING)
    private AddFriendMode mode;

    /**
     * creator申请成为friend用户的好友时提交的备注信息。
     */
    private String note;

    /**
     * friend用户审核的结果。 true——审核通过。
     */
    private boolean reviewStatus = false;

    /**
     * friend用户的审核时间, 为null表示未进行审核。
     */
    @Temporal(TemporalType.TIMESTAMP)
    private Timestamp reviewTime;

    /**
     * 审核时填写的备注信息
     */
    private String reviewNote;

    /**
     * 好友被归入的好友分组
     */
    @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY)
    private IMFriendGroup group;

}
